<!-- Object.defineProperty(obj,prop,descriptor)定义新属性或修改原有的属性
    obj:必需，目标对象
    prop:必需，需定义或修改的属性的名字
    descriptor:必需，目标属性所拥有的特性
    第三个参数里面的参数值
    value:设置属性的值 默认为undefined
    writable:是否可以重写，true|false 默认为false
    enumerable:目标属性是否可以被枚举，true|false 默认为false
    configurable:目标属性是否可以被删除或是否可以再次修改特性true|false 默认为false

   

-->
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        //Object.defineProperty()定义新属性或修改原有的属性
        var obj = {
            id: 1,
            pname: '小米',
            price: 1999
        };
        //1.以前的对象的属性添加方法
        // obj.num = 1000;
        // obj.price = 999;
        // console.log(obj);

        //2.Object.defineProperty(obj,prop,descriptor)定义新属性或修改原有的属性
        Object.defineProperty(obj, 'num', {
            value: 1000,
            enumerable: true  //可以遍历，不加或者false就不能遍历

        })
        console.log(obj);

        //3.该变值
        Object.defineProperty(obj, 'price', {
            value: 9.9

        })
        console.log(obj);

        //4.属性是否能被重写
        Object.defineProperty(obj, 'id', {

            // writable: false    //默认false不允许重写
            writable: true     //可以被重写

        });
        obj.id = 20;
        console.log(obj);


        //5.enumerable:目标属性是否可以被枚举，true|false 默认为false
        Object.defineProperty(obj, 'address', {
            value: '爱琴海',
            writable: false,
            enumerable: true,   //值为false则不允许遍历，默认的值是false(不允许遍历)

            // configurable:目标属性是否可以被删除或是否可以再次修改特性true|false 默认为false
            configurablue: false  //true代表address可以被删除

        });
        console.log(obj);
        console.log(Object.keys(obj)); //遍历对象
        // delete obj.address;
        // delete obj.pname;  //Pname可以被铲删除
        // console.log(obj);





    </script>
</body>

</html>